iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0

今天會仔細的看一下hardware handler的流程。
https://ithelp.ithome.com.tw/upload/images/20181009/20111939vtj1CC20PT.png
首先是hardware handler,resident monitor(memory的別名)這就是main memory,最下面是user的memory,上面是OS。

Hardware是被動的,為什麼這麼說?因為程式碼都是軟體instruction,hardware的動作也是user trigger的,例如我本來在執行我的程式,突然間user碰觸了device,這時就會產生一個interrupt,不管原本的程式執行到哪一行,它都會被打斷,而且會是你程式中間任何一行instruction中間。這個interrupt產生之後,會去到OS,所以你會看到一個箭頭指向上面。

當motherboard detect到signal的時候,它會做的第一件事情是去看interrupt vector(vector其實就是一個array of function pointer,因為每一個function call裡面code的大小不同,所以沒辦法control,於是就用一個vector將所有define好的signal一人一個欄位,裡面只是4個byte function pointer),signal裡面一定會有一個signal number,它看到number就知道這是由哪一個欄位的function call去handle的。

裝driver的時候,就是插到電腦的port裡面,它已經是hardware燒死的,它有一個signal number只到某一個欄位,裝driver的時候它就會overwrite那個欄位pointer的位置,所以其實是先透過interrupt vector,拿到function pointer,它就可以redirect到function call裡面去做處理,這個就叫做service routine(這是一個服務你要OS幫你做一件事情,處理這個service的function call或是routine,我們就叫做service routine,這裡才是真的在處理這個signal的動作的程式碼),最重要的,執行完後必須要return,不能夠影響原來的程式執行,OS做完後,會restore當初它program counter的位置,所以它會知道下一個位置就從這一行開始,都是有紀錄的。


上一篇
第六天 Interrupt-3
下一篇
第八天 Interrupt-5
系列文
30天~作業系統學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言